package com.spring.format.code.generation.util.file;

import java.util.Date;

import com.spring.format.code.generation.constants.Constants;
import com.spring.format.code.generation.constants.FileNameEnumType;
import com.spring.format.code.generation.mybatis.po.TablePO;
import com.spring.format.code.generation.mybatis.vo.CreateFileVO;
import com.spring.format.code.generation.util.NameUtil;
import com.spring.format.code.generation.util.PathUtil;

/**
 * 文件生成帮助类
 * 
 * @author lenovo
 *
 */
public class CommonWebServiceApiFileUtil {
	private CommonWebServiceApiFileUtil() {

	}

	public static String content(CreateFileVO fileVO) {
		TablePO tablePO = fileVO.getTablePO();
		// vo的类名
		String voName = NameUtil.createFileName(tablePO.getTable_name(), FileNameEnumType.VO_NAME);
		// vo的类名
		String formName = NameUtil.createFileName(tablePO.getTable_name(), FileNameEnumType.FORM_NAME);
		StringBuilder attribute = new StringBuilder();
		// 拼接文件头
		attribute.append(head(tablePO));

		StringBuilder methodStr = new StringBuilder();
		// 新增数据
		methodStr.append(insert(formName));
		// 删除数据
		methodStr.append(delete());
		// 编辑数据
		methodStr.append(update(formName));
		// 根据id查询
		methodStr.append(queryById(voName));
		// 查询分页
		methodStr.append(page(voName,formName));
		// 禁用
		methodStr.append(disable());
		// 启用
		methodStr.append(enable());

		// // 根据or条件获取唯一数据
		// methodStr.append(queryUniqueByOr(voName,formName));
		// // 根据or条件获取数据集合
		// methodStr.append(queryListByOr(voName,formName));
		// 取数据集合
		methodStr.append(queryList(voName,formName));
		attribute.append(methodStr).append("} //end class");

		return attribute.toString();

	}

	// 拼接文件头
	public static String head(TablePO tablePO) {
		StringBuilder attribute = new StringBuilder();
		attribute.append("package ")
				.append(PathUtil.createPackagePath(tablePO.getTable_name(), FileNameEnumType.WEB_SERVICE_API_NAME))
				.append("import java.util.List; \n")
				// .append("import com.sx.manage.constants.MDataStatusType; \n")
				// .append("import ").append(PathUtil.createImportPath(tablePO.getTable_name(),
				// FileNameEnumType.FORM_NAME)).append(";\n")
				.append("import ").append(PathUtil.createImportPath(tablePO.getTable_name(), FileNameEnumType.VO_NAME))
				.append(";\n")
				// .append(Constants.CONSUMER_LOGIN_VO_PATH).append("\n")
				// .append(Constants.RESULT_LIST_VO_PATH).append("\n")
				// .append(Constants.RESULT_OBJECT_VO_PATH).append("\n")
				// .append(Constants.RESULT_BOOLEAN_VO_PATH).append("\n")
				.append("import ").append(Constants.RESINFO_PATH).append("; \n")

				.append("/**\n").append("  *").append(tablePO.getTable_comment()).append("\n").append("  *@author ")
				.append(System.getProperties().getProperty("user.name")).append("\n").append("  *@version 1.0.0 ")
				.append(DateUtil.dateFormat(new Date(), DateUtil.DATE_FORMAT)).append(" \n").append("  */\n")
				.append("public interface ")
				.append(NameUtil.createFileName(tablePO.getTable_name(), FileNameEnumType.WEB_SERVICE_API_NAME))
				.append("  { \n");

		return attribute.toString();
	}

	// 新增数据
	public static String insert(String formName) {
		StringBuilder methodStr = new StringBuilder();
		// 增加数据
		methodStr.append(" /** 1  \n ").append("  * 增加数据  \n ").append("  * @param paraForm \n ")
				.append("  * @param loginVO \n ").append("  */ \n ").append("  public ").append(Constants.RESINFO_VO)
				.append("<?>").append(Constants.SERVICE_METHOD_ADD).append(" ( ")
				.append(formName).append("  paraForm ,").append(Constants.CONSUMER_LOGIN_VO).append(" loginVO ); \n ");

		return methodStr.toString();
	}

	// 删除数据数据
	public static String delete() {
		StringBuilder methodStr = new StringBuilder();
		methodStr.append(" /** 2 \n ").append("  * 根据id删除数据  \n ").append("  * @param id \n ")
				.append("  * @param loginVO \n ").append("  */ \n ").append("  public ").append(Constants.RESINFO_VO)
				.append("<?>  ").append(Constants.DAO_METHOD_DELETE_BY_ID).append("(Integer id,")
				.append(Constants.CONSUMER_LOGIN_VO).append(" loginVO ); \n ");

		return methodStr.toString();
	}

	// 编辑数据
	public static String update(String formName) {
		StringBuilder methodStr = new StringBuilder();
		// 增加数据
		methodStr.append(" /** 3  \n ").append("  * 编辑数据  \n ").append("  * @param paraForm \n ")
				.append("  * @param loginVO \n ").append("  */ \n ").append("  public ").append(Constants.RESINFO_VO)
				.append("<?>  ").append(Constants.SERVICE_METHOD_UPDATE).append(" ( ").append(formName).append("  paraForm ,")
				.append(Constants.CONSUMER_LOGIN_VO).append(" loginVO ); \n ");

		return methodStr.toString();
	}

	// 根据id查询数据
	public static String queryById(String voName) {
		StringBuilder methodStr = new StringBuilder();
		methodStr.append(" /** 4 \n ").append("  * 根据id查询数据  \n ").append("  * @param id \n ").append("  */ \n ")
				.append("  public ").append(Constants.RESINFO_VO).append("<").append(voName).append(">  ")
				.append(Constants.DAO_METHOD_QUERY_BY_ID).append("(Integer id ); \n ");

		return methodStr.toString();
	}

	// 查询分页信息
	public static String page(String voName,String formName) {
		StringBuilder methodStr = new StringBuilder();
		methodStr.append(" /** 5 \n ").append("  * 查询分页  \n ").append("  * @param paraForm \n ").append("  */ \n ")
				.append("  public ").append(Constants.RESINFO_VO).append("<List<").append(voName).append(">>  ")
				.append(Constants.DAO_METHOD_QUERY_PAGE).append("( ").append(formName).append("  paraForm ); \n ");

		return methodStr.toString();
	}

	// 禁用
	public static String disable() {
		StringBuilder str = new StringBuilder();
		str.append(" /** \n").append(" 禁用  \n ").append(" * @param id \n  * @param loginVO \n */ \n").append("public ")
				.append(Constants.RESINFO_VO).append("<?> disable(Integer id,").append(Constants.CONSUMER_LOGIN_VO)
				.append(" loginVO); \n ");
		return str.toString();
	}

	// 启用
	public static String enable() {
		StringBuilder str = new StringBuilder();
		str.append(" /** \n").append(" 启用  \n ").append(" * @param id \n  * @param loginVO \n */ \n").append("public ")
				.append(Constants.RESINFO_VO).append("<?> enable(Integer id,").append(Constants.CONSUMER_LOGIN_VO)
				.append(" loginVO); \n ");
		return str.toString();
	}

	// 根据or条件查询唯一数据
	public static String queryUniqueByOr(String voName,String formName) {
		StringBuilder methodStr = new StringBuilder();
		methodStr.append(" /** 8 \n ").append("  * 根据or条件获取唯一数据  \n ").append("  * @param paraForm \n ").append("  */ \n ")
				.append("  public ").append(Constants.RESINFO_VO).append("<").append(voName).append(">  ")
				.append(Constants.DAO_METHOD_QUERY_UNIQUE_BY_OR).append("( ").append(formName).append("  vo ); \n ");

		return methodStr.toString();
	}

	// 根据or条件查询列表数据
	public static String queryListByOr(String voName,String formName) {
		StringBuilder methodStr = new StringBuilder();
		methodStr.append(" /** 9 \n ").append("  * 根据 or 条件获取数据集合  \n ").append("  * @param paraForm \n ").append("  */ \n ")
				.append("  public ResultListVO<").append(voName).append("> ")
				.append(Constants.DAO_METHOD_QUERY_LIST_BY_OR).append("( ").append(formName).append("  vo ); \n ");

		return methodStr.toString();
	}

	// 根据条件查询列表数据
	public static String queryList(String voName,String formName) {
		StringBuilder methodStr = new StringBuilder();
		methodStr.append(" /** 10 \n ").append("  * 获取数据集合  \n ").append("  * @param paraForm \n ").append("  */ \n ")
				.append("  public ").append(Constants.RESINFO_VO).append("<List<").append(voName).append(">>  ")
				.append(Constants.SERVICE_METHOD_QUERY_LIST).append("( ").append(formName).append("  paraForm ); \n ");

		return methodStr.toString();
	}
}
